# -*- coding: utf-8 -*-
"""Реализация view для pylons.
"""

import logging
import os.path

# pylons imports
from pylons.templating import render
from pylons.controllers import WSGIController

# pyview imports
from pyview import BaseView

__all__ = ['PylonsView']

log = logging.getLogger(__name__)

class PylonsView(BaseView):
    
    """Реализация view для pylons.
        
       Переопределяет метод view, для работы с pylons.templating.render.
       Расширяет базовую реализацию атрибутом template.
        
       @type template: C{str} or C{unicode}
       @cvar template: статический атрибут, содержит путь, 
        до шаблона страницы.
        
       @type template_root: C{str} or C{unicode}
       @cvar template_root: место, относительно которого 
        указан путь до шаблона страницы.
    
       @type is_stripng_template: C{bool}
       @cvar is_stripng_template: если True, то разделитель пути / будет убран из 
        имени шаблона, атрибута template, при первом вызове _mk_template_path. 
        По умолчанию True.
    """
    
    template = ''
    template_root = '/'
    
    is_striping_template = True
    
    def _strip_template(self):
        """ Удаляет лишнии символы из имени шаблона.
        В данной реализации символ `/`.
        """
        self.template = self.template.strip('/')

    def _mk_template_path(self):
        """ Составляет путь до шаблона из
        template_root и template.
        """
        
        # map-geek :)
        #name, root = map(os.path.normpath, 
        #    (self.template, self.template_root))
        
        if self.is_striping_template:
            self._strip_template()

        name = os.path.normpath(self.template)
        root = os.path.normpath(self.template_root)

        return os.path.join(root, name) 

    def view(self):
        """Вызывает метод генерации контекста, 
        затем производит render шаблона и возвращает результат.
        
        Шаблон который будет использован, определяется следующим образом:
            to_render = self.template_root+self.template
        
        """
        
        self.generate_context()
        
        to_render = self._mk_template_path()

        return render(to_render)

class StandalonePylonsView(WSGIController, PylonsView):
    pass

